#include "matrizAdjacencia.h"

MatrizAdjacencia::MatrizAdjacencia()
{
}

MatrizAdjacencia::~MatrizAdjacencia()
{
    delete this->mDistancias;
}

void MatrizAdjacencia::constroi()
{
    int nVertices = 8;


/*    while ( nVertices <= 0 )
    {
        std::cout << "Insira o numero de vertices do grafo: ";
        std::cin >> nVertices;
    }*/

    this->mNumVertices = nVertices;

    this->mMatriz = new int*[nVertices];
    for (int i = 0; i < nVertices; i++)
    {
        this->mMatriz[i] = new int[nVertices];
        for (int j = 0; j < nVertices; j++)
        {
            this->mMatriz[i][j] = 0;
        }
    }

    this->mMatriz[0][1] = 3;
    this->mMatriz[0][2] = 4;
    this->mMatriz[1][0] = 3;
    this->mMatriz[1][2] = 5;
    this->mMatriz[1][3] = 4;
    this->mMatriz[2][0] = 4;
    this->mMatriz[2][1] = 5;
    this->mMatriz[2][4] = 2;
    this->mMatriz[3][1] = 4;
    this->mMatriz[3][4] = 5;
    this->mMatriz[3][5] = 4;
    this->mMatriz[4][2] = 2;
    this->mMatriz[4][3] = 5;
    this->mMatriz[4][6] = 4;
    this->mMatriz[5][3] = 4;
    this->mMatriz[6][4] = 4;
    this->mMatriz[6][7] = 3;

    this->mDistancias = new float[nVertices];

    this->mDistancias[0] = 20.0;
    this->mDistancias[1] = 10.4;
    this->mDistancias[2] = 8.9;
    this->mDistancias[3] = 6.7;
    this->mDistancias[4] = 6.9;
    this->mDistancias[5] = 4.0;
    this->mDistancias[6] = 3.0;
    this->mDistancias[7] = 0.0;


    /*int arestaX=0;
    int arestaY=0;

    while (arestaX >= 0 && arestaY >= 0)
    {
        std::cout << "A qualquer momento digite -1 para sair!" << std::endl;
        std::cout << "Digite o indice do vertice de quem vem a aresta: ";
        std::cin >> arestaX;
        std::cout << "Digite o indice do vertice pra quem vai aresta: ";
        std::cin >> arestaY;
        if (arestaX >= 0 && arestaY >= 0)
            this->mMatriz[arestaX][arestaY] = 1;
    }*/

}

void MatrizAdjacencia::mostra()
{
    for (int i = 0; i < this->mNumVertices; i++)
    {
        for (int j = 0; j < this->mNumVertices; j++)
        {
            std::cout << this->mMatriz[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

int* MatrizAdjacencia::getFilhos(int linha)
{
    int* r;

    if(linha >= 0)
    {
        r = this->mMatriz[linha];
    }
    else
    {
        r = new int[this->getNumVertices()];
        for( int i = 0; i < this->getNumVertices(); i++ )
        {
            r[i] = 0;
        }
    }

    return r;
}

int MatrizAdjacencia::getNumVertices()
{
    return this->mNumVertices;
}

float MatrizAdjacencia::getDistancia(int vVertice)
{
    return this->mDistancias[vVertice];
}
